#pragma once

#include "fxcc/core/graph/common/pch.h"
#include "fxcc/core/graph/common/Type.h"
#include "fxcc/core/graph/common/ImageMipmap.h"
#include "fxcc/core/graph/common/Texture2DJack.h"


namespace fxcc
{
    namespace graph
    {
        namespace common
        {
            struct FXCC_API TextureCubeJack :public fxcc::Base
            {
                struct Desc
                {
                    std::string m_DDSPath;

                    std::string m_HDRPath;

                    fxcc::graph::common::ImageMipmap::MipMapData m_HDRConfig = { 512,512,4,2 };

                    std::string m_WICImages[6];

                    fxcc::graph::common::SamplerType m_SamplerType = fxcc::graph::common::SamplerType::_sampler_cube_default_;

                    enum Type {
                        _DDS_, _WIC_, _HDR_, _ALLOC_
                    }m_Type = Type::_DDS_;

                    bool SetDDS(const std::string& ddsPath)
                    {
                        m_DDSPath = ddsPath;
                        m_Type = Type::_DDS_;

                        return fs::exists(ddsPath);
                    }

                } m_Desc;
                
                std::shared_ptr<fxcc::graph::common::Texture2DJack> m_FaceTextures[6];

                TextureCubeJack() {};

                TextureCubeJack(const Desc& desc) :m_Desc(desc)
                {

                }
                virtual bool CreateCubeDDS(const std::string& ddsPath) {
                    assert(" create cube dds");
                    return false;
                }

                
                virtual void SetShader(int index) const { assert("failed set shader"); }



            };
        };
    }
}